/*********************************************
 * EIRMULATOR is under the beerware license.
 *
 * THE BEERWARE LICENSE (Revision 42):
 *
 * As long as you retain this notice you can
 * do whatever you want with this stuff. If we
 * meet some day, and you think this stuff is 
 * worth it, you can buy me a drink in return.
*/


/** \file maths.h
* \brief Déclare des fonctions de géométrie 2d et autres fonctions spécialisés.
* \author JDaM <brossill@enseirb.fr>
* \version 0.8.0
* \date 09.10.2005 @ 15:00
*
*/


#ifndef MATHS_H
#define MATHS_H

#include <math.h>

#include <ode/ode.h>

#define ABS_DEG2RAD(d) ( M_PI_2 - DEG2RAD(d) )

#define ABS_RAD2DEG(r) (90.0f - RAD2DEG(r) )

#define DEG2RAD(d) ((d)*M_PI)/180.0f

#define RAD2DEG(r) (((r)*180.0f)/M_PI)

#define RANDOM(max) (rand()%(max))


/** \brief Produit scalaire en 2 dimensions
 * 
 * La fonction retourne \f[ x_a*x_b + y_a*y_b \f]
 */
dReal scal2d(dReal xa, dReal ya, dReal xb, dReal yb);



/** \brief Retourne l'angle entre le vecteur x et AB
 */
dReal angle( dReal xa, dReal ya, dReal xb, dReal yb);

/** \brief Retourne la valeur absolue */
dReal absf(dReal);

/** \brief Retourne le signe
 *
 * \param a
 * 
 * La fonction renvoit -1.0 si a < 0 et 1.0 sinon.
*/
dReal sign( dReal a );

/** \brief Calcule la distance entre deux points en 2D */
dReal dist2d( dReal x1,dReal y1, dReal x2, dReal y2);

/** \brief Calcule la distance au carré deux points en 2D */
dReal dist2d_2( dReal x1,dReal y1, dReal x2, dReal y2);

/** \brief Effectue une rotation
 * \todo Améliorer le commentaire
 * <JDWN>
 * Effectue une rotation de alpha (en rad) du vecteur (ax,ay) selon z
 * </JDWN>
 */
void rot2d( dReal* ax, dReal* ay, dReal alpha);

/** \brief Calcule la norme
 *
 * La fonction retourne \f[ \sqrt[ x**2 + y**2 ]
 */
dReal norm2d( dReal x, dReal y);

#endif /* #ifndef MATHS_H */
